package com.serviportales.serviquality.dao;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import com.serviportales.serviportales.dao.GenericHibernateDAO;
import com.serviportales.serviquality.model.TipoNodo;

@Repository
public class TipoNodoDAO extends GenericHibernateDAO<TipoNodo> {

	private static final long serialVersionUID = 1L;

	@Override
	public DetachedCriteria getBasicDetachedCriteria(TipoNodo tipoNodo) {
		DetachedCriteria criteria = DetachedCriteria.forClass(TipoNodo.class);
		if (tipoNodo.getCodigo() != null) {
			criteria.add(Restrictions.ilike("codigo", tipoNodo.getCodigo(), MatchMode.ANYWHERE));
		}
		if (tipoNodo.getNombre() != null) {
			criteria.add(Restrictions.ilike("nombre", tipoNodo.getNombre(), MatchMode.ANYWHERE));
		}
		if (tipoNodo.getDescripcion() != null) {
			criteria.add(Restrictions.ilike("descripcion", tipoNodo.getDescripcion(), MatchMode.ANYWHERE));
		}
		if (tipoNodo.getNivel() != null) {
			criteria.add(Restrictions.eq("nivel", tipoNodo.getNivel()));
		}
		if (tipoNodo.getEstadoRegistro() != null && tipoNodo.getEstadoRegistro().getCodigo() != null) {
			criteria.add(Restrictions.eq("estadoRegistro.codigo", tipoNodo.getEstadoRegistro().getCodigo()));
		}
		criteria.addOrder(Order.asc("nivel"));
		return criteria;
	}

	public TipoNodo selectByID(String codigo) {
		return getHibernateTemplate().get(TipoNodo.class, codigo);
	}
}
